package com.wll.design.原型;

/**
 * @author ：wanglulu
 * @date ： 2021/11/12 17:46
 * @description：测试原型模式
 *
 * 核心： 用于创建重复的对象， 同时又能保证性能      本体提供一个克隆体给外部使用，不影响本体数据
 * 案例： 数据库 CRM 组件 mybatis 从数据查询数据
 *
 * 每次查询数据库，查到数据后把所有数据封装一个对象，返回
 * 同时有10000请求 同时查询数据库 就会有10000个对象 User
 * 解决： 缓存数据
 *
 * 查询数据缓存  再次查询相同数据 从缓存中获取
 *
 * 从缓存中直接获取数据很危险  如果有人修改属性值， 则所有人的数据都被修改了    使得缓存数据变脏
 *
 * 所以从缓存中获取时  缓存中给出的是 源对象的克隆体  不是源对象
 *
 * 注意点：  深拷贝（递归克隆）  浅拷贝
 *
 * @version: 1.0
 */
public class MainTest {

    public static void main(String[] args) throws Exception{

        MybatisUtils mybatisUtils = new MybatisUtils();
        User user = mybatisUtils.getUser("keke");
        System.out.println("第一次 获取 ====" + user.toString());
        user.setName("乐乐");
        System.out.println("第一次 修改了 ====" + user.toString());

        User user2 = mybatisUtils.getUser("keke");
        System.out.println(user2.toString());

        User user3 = mybatisUtils.getUser("keke");
        System.out.println(user3.toString());

    }





}
